package com.liuxinlong.modules.material.service;

import com.liuxinlong.common.ImportResp;
import com.liuxinlong.modules.entity.MaterialConvolution;
import com.liuxinlong.modules.material.dto.MaterialConvolutionImportDto;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 物料替换服务层接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022年3月21日
 */
public interface MaterialConvolutionService {

    /**
     * 分页查询物料成本卷积列表
     *
     * @param queryParam 查询参数
     * @return 物料成本卷积列表
     */
    List<Map<String, Object>> pageMaterialConvolutionList(Map<String, Object> queryParam);

    /**
     * 根据查询条件统计物料成本卷积数量
     *
     * @param queryParam 查询参数
     * @return 物料成本卷积数量
     */
    int getConvolutionRecordCount(Map<String, Object> queryParam);

    /**
     * 新增成本卷积记录
     *
     * @param materialConvolution 成本卷积记录
     */
    void addMaterialConvolution(MaterialConvolution materialConvolution);

    /**
     * 删除成本卷积记录
     *
     * @param id 成本卷积记录id
     */
    void deleteMaterialConvolution(String id);

    /**
     * 导入数据预处理
     *
     * @param fileName 文件地址
     * @return 预处理数据
     */
    ImportResp importConvolutions(String fileName);

    /**
     * 批量新增物料成本卷积记录
     *
     * @param dataList       物料成本卷积信息
     * @param otherParameter 拓展参数
     * @return 失败数据
     */
    ImportResp batchAddConvolution(List<MaterialConvolutionImportDto> dataList, Map<String, Object> otherParameter);

    /**
     * 导出物料成本卷积记录
     *
     * @param response response
     */
    void exportMaterialConvolution(HttpServletResponse response);

    /**
     * 查询物料信息
     *
     * @param materialNo 物料号
     * @return 物料信息
     */
    Map<String, Object> getOneMaterial(String materialNo);

    /**
     * 物料成本卷积记录状态变更
     *
     * @param id           id
     * @param operate      操作
     * @param targetStatus 目标状态
     */
    void updateMaterialConvolutionStatus(String id, int operate, String targetStatus);

    /**
     * 查询成本卷积配置信息
     *
     * @return 成本卷积配置信息
     */
    Map<String, Object> queryConvolutionConfig();

    /**
     * 修改物料成本卷积配置信息
     *
     * @param wpcUser wpc通知用户
     * @param wscUser wsc通知用户
     * @param swtUser swt通知用户
     */
    void updateConvolutionConfig(String wpcUser, String wscUser, String swtUser);

    /**
     * 查询物料成本卷积信息
     *
     * @return 物料成本卷积信息
     */
    Map<String, Object> getConvolutionInfo(String id);

    /**
     * 查询物料成本卷积错误信息列表
     *
     * @param id        成本卷积id
     * @param processId 流程节点id
     * @return 物料成本卷积错误信息列表
     */
    List<Map<String, Object>> getErrorList(String id, String processId);

    /**
     * 查询物料成本卷积流程信息列表
     *
     * @param id 成本卷积id
     * @return 物料成本卷积流程信息列表
     */
    List<Map<String, Object>> getConvolutionProcessInfo(String id);

    /**
     * 接收状态修改结果
     *
     * @param id      成本卷积日志id
     * @param content 内容
     */
    void updateStatusOut(String id, String content);

    /**
     * 查询物料成本卷积操作记录信息列表
     *
     * @param queryParam 查询参数
     * @return 物料成本卷积操作记录信息列表
     */
    List<Map<String, Object>> getConvolutionStepInfo(Map<String, Object> queryParam);
}
